
//Copyright 1997-2009 Syrinx Development, Inc.
//This file is part of the Syrinx Web Application Framework (SWAF).
// == BEGIN LICENSE ==
//
// Licensed under the terms of any of the following licenses at your
// choice:
//
//  - GNU General Public License Version 3 or later (the "GPL")
//    http://www.gnu.org/licenses/gpl.html
//
//  - GNU Lesser General Public License Version 3 or later (the "LGPL")
//    http://www.gnu.org/licenses/lgpl.html
//
//  - Mozilla Public License Version 1.1 or later (the "MPL")
//    http://www.mozilla.org/MPL/MPL-1.1.html
//
// == END LICENSE ==
using System;
using System.Diagnostics;
using System.Text;

using Swaf;
using Swaf.Resource;

namespace Swaf.Crypto
{
	/// <summary>
	/// Summary description for CryptoMacroFunction.
	/// </summary>
	public class CryptoMacroFunction : IMacro
	{
		protected ICryptoManager m_mgr = null;
		public CryptoMacroFunction(string registeredName)
		{
			m_mgr = (ICryptoManager)Application.currentApp.appData["sysObjs-Crypto"];
		}
		#region IMacro Members

		public string calcValue(string macroName, string macroParams, System.Collections.IDictionary workset)
		{
			if(macroParams == null)
				return "";

			string cryptoName = "";
			string newVal = macroParams;
			int pos = macroParams.IndexOf(',');
			if(pos != -1)
			{
				cryptoName = macroParams.Substring(0, pos);
				newVal = macroParams.Substring(pos+1);
			}

			if(m_mgr != null)
			{
				if(macroName == "Encrypt")
				{
					if(CryptoManager.EncryptMacroGenDecrypt)
					{
						StringBuilder buff = new StringBuilder();
						buff.Append("$Decrypt(");
						if(cryptoName != "")
							buff.Append(cryptoName).Append(",");
						buff.Append(m_mgr.encrypt(cryptoName, newVal)).Append(")$");
						newVal = buff.ToString();
					}
				}
				else //Assume decrypt for faster work over doing another string compare
				{
					newVal = m_mgr.decrypt(cryptoName, newVal);
				}
			}
			return newVal;
		}

		#endregion
	}
}
